#ifndef DEFECTDETECTIONFORM_H
#define DEFECTDETECTIONFORM_H

#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QProgressDialog>
#include <QTimer>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QFileDialog>
#include <QTextEdit>
#include <QMessageBox>
#include<QTableWidget>
#include <QtXml>
#include <QDomDocument>
#include "DefectDetection.h"
#include "BuildingExtractor.h"
class DefectDetectionForm :
	public QDialog
{
	Q_OBJECT
public:
	DefectDetectionForm(QWidget *parent, QString modelPath, QString applicationPath, QTableWidget* taskListTableWidget, int iFlags);
	~DefectDetectionForm();
private:
	void InitUI(); //初始化识别对话框
	void InitUI_SAM();
	void InitUI_RoadRepair(); //初始化道路修复对话框
	QStringList GetImages(QString file_path);
	QStringList GetShapes(QString file_path);

public slots:
	void DefectDT();//启动识别任务函数
	void OpenRasterFile();//获取打开识别图像文件夹
	void OpenShpFile(); // 获取打开矢量文件的文件夹
	void SaveResultFile();//获取保存图像识别结果文件夹
	void Perform();//图像识别任务执行主代码
	void OpenMaskFile(); // 添加打开掩膜文件的槽函数

private:
	QPushButton* _openMaskFileBtn;  // 打开掩膜文件夹按钮
	QPushButton* _extractBtn;//执行识别任务按钮
	QPushButton* _cancleBtn;//取消识别任务按钮

	QLineEdit* _taskNameLineEdit;//记录任务识别名称
	QLineEdit* _sourceDataFile;//记录识别数据路径
	QLineEdit* _sourceShpFile;//记录识别矢量路径 ylm
	QLineEdit* _exportDataFile;//记录识别结果输出路径
	QLineEdit* _sourceMaskFile;  // 记录掩膜数据路径
	QPushButton* _openSourceFileBtn;//打开图像所在文件夹按钮
	QPushButton* _openShpFileBtn;//打开图像所在文件夹按钮
	QPushButton* _saveDataFileBtn;//保存识别结果所在文件夹按钮

	//std::string _strOpenFileName;
	std::string _strOpenDirectory;//识别图像所在文件夹
	std::string _strOpenShpDirentory;//识别图像shp所在文件夹
	std::string _strSaveDirectory;//识别结果保存文件夹
	std::string _strOpenMaskDirectory;  // 掩膜图像所在文件夹

	//std::string _strSaveFileName;
	QProgressDialog* _pdDialog;//识别进度对话框
	
	QString _strTaskExecuteTime;//记录识别任务的开始时间
    QTableWidget* _taskListTableWidget;
	int _progNum;//记录进度变量
	QTimer* _timer;

	QString _modelPath;
	QString _applicationPath;
	BuildingExtractor _buildingExtractor;// 添加 BuildingExtractor 成员变量
	int tFlags;
	
	DefectDetection* samDectection=nullptr;
};

#endif 